<?php

namespace app\common\model;


use app\common\model\trait\ConstIsPass;
use app\common\model\trait\ConstValid;
use think\model\concern\SoftDelete;
use think\model\relation\HasOne;

/**
 * 管理员 模型类
 * @property AdminArea $area 所属地区
 * @property AdminRole $admin_role 所属角色
 * @property AdminPost $admin_post 所属岗位
 * @method   self       find($data = null)     找单条记录
 */
class Admin extends base\Admin
{
    use SoftDelete;

    use ConstIsPass;
    use ConstValid;


    const PASSWORD_REGEX = '^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,16}$';


    /**
     * 管理员角色关联
     * @return HasOne
     */
    public function adminRole(): HasOne
    {
        return $this->hasOne(AdminRole::class, 'id', 'role_id');
    }

    /**
     * 管理员岗位关联
     * @return HasOne
     */
    public function adminPost(): HasOne
    {
        return $this->hasOne(AdminPost::class, 'id', 'post_id');
    }









    private function filterJsonByCodeList($data, $codeList)
    {

        // 递归函数，用于遍历和过滤数组
        function filterChildren(&$children, $codeList)
        {
            // 遍历子数组
            foreach ($children as $key => &$child) {

                // 如果当前节点有子节点
                if (isset($child['children'])) {
                    // 递归调用以过滤子节点
                    filterChildren($child['children'], $codeList);

                    // 如果子节点为空（即所有不符合条件的子节点都被移除了），则移除当前节点

                    if (empty($child['children'])) {
                        unset($children[$key]);
                    }
                } // 如果当前节点是末级节点且code不在$codeList中，则移除该节点
                elseif (!in_array($child['code'], $codeList)) {

                    unset($children[$key]);
                }
            }
        }

        // 调用递归函数以过滤顶级节点的子节点
        filterChildren($data, $codeList);
        // 将处理后的数组编码回JSON字符串
        return $data;
    }


}
